package com.xdwanj.volleytest.util;

import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.text.Html;
import android.util.Log;
import android.view.Display;
import android.widget.TextView;

import java.net.URL;

public class URLImageGetter implements Html.ImageGetter {
    // 地址
    private String mUrl;
    // TAG
    private final String TAG = "URLImageGetter";
    // 文本控件
    TextView textView;
    // 上下文
    Context context;

    /**
     * 构造方法
     *
     * @param mUrl     服务器的地址
     * @param context  上下文对象
     * @param textView textView
     */
    public URLImageGetter(String mUrl, Context context, TextView textView) {
        this.mUrl = mUrl;
        this.context = context;
        this.textView = textView;
    }

    /**
     * 重写的回调方法
     *
     * @param paramString img标签的src内容
     * @return 图片
     */
    @Override
    public Drawable getDrawable(String paramString) {
        // 打印日志
        Log.d(TAG, "getDrawable: " + mUrl + paramString);
        // TODO:
        URLDrawable urlDrawable = new URLDrawable(context);

        // 加载图片线程
        ImageGetterAsyncTask getterTask = new ImageGetterAsyncTask(urlDrawable);
        // 执行线程
        getterTask.execute(mUrl + paramString);

        return urlDrawable;
    }

    // 异步线程任务
    private class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
        // 网络图像资源
        URLDrawable urlDrawable;

        /**
         * 传入图像
         *
         * @param drawable 网络图像
         */
        public ImageGetterAsyncTask(URLDrawable drawable) {
            this.urlDrawable = drawable;
        }


        /**
         * 执行后调用, 设置UI界面
         *
         * @param result 结果
         */
        @Override
        protected void onPostExecute(Drawable result) {
            // 判断非空
            if (result != null) {
                // 配置UI
                urlDrawable.drawable = result;
                // 请求布局
                URLImageGetter.this.textView.requestLayout();
            }
        }

        /**
         * 加载任务
         *
         * @param params 参数
         * @return 图像
         */
        @Override
        protected Drawable doInBackground(String... params) {
            String source = params[0];
            return fetchDrawable(source);
        }

        /**
         * 获取可绘制对象
         *
         * @param url 图片地址
         * @return 图像
         */
        public Drawable fetchDrawable(String url) {
            Drawable drawable = null;
            URL Url;
            try {
                Url = new URL(url);
                drawable = Drawable.createFromStream(Url.openStream(), "");
            } catch (Exception e) {
                return null;
            }
//            // 按比例缩放图片
//            Rect bounds = getDefaultImageBounds(context);
//            // 设置新宽高
//            int newWidth = bounds.width();
//            int newHeight = bounds.height();
//            // 比例
//            double factor = 1;
//            // 求出比例
//            double fx = (double) drawable.getIntrinsicWidth() / (double) newWidth;
//            double fy = (double) drawable.getIntrinsicHeight() / (double) newHeight;
//            // 得出最大的比例
//            factor = Math.max(fx, fy);
//            if (factor < 1) {
//                factor = 1;
//            }
//            // 将宽度和高度确定
//            newWidth = (int) (drawable.getIntrinsicWidth() / factor);
//            newHeight = (int) (drawable.getIntrinsicHeight() / factor);
//            // 设置宽高
//            drawable.setBounds(0, 0, newWidth, newHeight);

            Display display = ((Activity) context).getWindowManager()
                    .getDefaultDisplay();
            int width = display.getWidth();
//        int height = (int) (width * 3 / 4);
            double i = (double) drawable.getIntrinsicHeight() * ((double) display.getWidth() / (double) drawable.getIntrinsicWidth());
            if (i < 1) {
                i = 1;
            }
            int height = (int) i;

            // 设置宽高
            drawable.setBounds(0, 0, width, height);

            return drawable;
        }
    }

    // 预定图片宽高比例为 4:3
    @SuppressWarnings("deprecation")
    public Rect getDefaultImageBounds(Context context) {
        Display display = ((Activity) context)
                .getWindowManager()
                .getDefaultDisplay();
        // 获取宽度
        int width = display.getWidth();
        int height = (int) (width * 3 / 4);
        Rect bounds = new Rect(0, 0, width, height);
        return bounds;
    }
}
